package com.wwg.threadSort;

import java.util.concurrent.Semaphore;

/**
 * @author: wwg
 * @date: 2022/3/11 20:44
 */

public class ThreeThread {
    public static void main(String[] args) throws InterruptedException {
        Semaphore sempA = new Semaphore(1);
        Semaphore sempB = new Semaphore(0);
        Semaphore sempC = new Semaphore(0);
        int N=100;
        Thread threadA = new PrintThread(N, sempA, sempB, "A");
        Thread threadB = new PrintThread(N, sempB, sempC, "B");
        Thread threadC = new PrintThread(N, sempC, sempA, "C");
        threadA.start();
        threadB.start();
        threadC.start();
    }

    static class PrintThread extends Thread{

        int N;
        Semaphore curSemp;
        Semaphore nextSemp;
        String name;

        public PrintThread(int n, Semaphore curSemp, Semaphore nextSemp, String name) {
            N = n;
            this.curSemp = curSemp;
            this.nextSemp = nextSemp;
            this.name = name;
        }

        public void run() {
            for (int i = 0; i < N; ++i) {
                try {
                    curSemp.acquire();
                    System.out.println(name);
                    nextSemp.release();
                } catch (InterruptedException e) {
                    Thread.currentThread().interrupt();
                }
            }
        }

    }
}
